import streamlit as st
from utils import *
from constants import *
import dotenv

dotenv.load_dotenv()

# Creating Session State Variable
if 'HuggingFace_API_Key' not in st.session_state:
    st.session_state['HuggingFace_API_Key'] = ''
if 'Pinecone_API_Key' not in st.session_state:
    st.session_state['Pinecone_API_Key'] = ''

#
st.title('🤖 AI Assistance For Website')

# ********SIDE BAR Funtionality started*******

# Sidebar to capture the API keys
st.sidebar.title("😎🗝️")
st.session_state['HuggingFace_API_Key'] = st.sidebar.text_input("What's your HuggingFace API key?", type="password")
st.session_state['Pinecone_API_Key'] = st.sidebar.text_input("What's your Pinecone API key?", type="password")

load_button = st.sidebar.button("Load data to Pinecone", key="load_button")

# If the bove button is clicked, pushing the data to Pinecone...
if load_button:
    # Proceed only if API keys are provided
    if st.session_state['HuggingFace_API_Key'] != "" and st.session_state['Pinecone_API_Key'] != "":

        # Fetch data from site
        # 获取网站信息
        site_data = get_website_data(WEBSITE_URL)
        st.write("Data pull done...")

        # Split data into chunks
        # 切分网站信息
        chunks_data = split_data(site_data)
        st.write("Spliting data done...")

        # Creating embeddings instance
        embeddings = create_embeddings()
        st.write("Embeddings instance creation done...")

        # Push data to Pinecone
        push_to_pinecone(embeddings=embeddings, docs=chunks_data)
        st.write("Pushing data to Pinecone done...")

        st.sidebar.success("Data pushed to Pinecone successfully!")
    else:
        st.sidebar.error("Ooopssss!!! Please provide API keys.....")

# ********SIDE BAR Funtionality ended*******

# Captures User Inputs
prompt = st.text_input('How can I help you my friend ❓', key="prompt")  # The box for the text prompt
document_count = st.slider('No.Of links to return 🔗 - (0 LOW || 5 HIGH)', 0, 5, 2, step=1)

submit = st.button("Search")

if submit:
    # Proceed only if API keys are provided
    if st.session_state['HuggingFace_API_Key'] != "" and st.session_state['Pinecone_API_Key'] != "":

        # Creating embeddings instance
        embeddings = create_embeddings()
        st.write("Embeddings instance creation done...")

        # Pull index data from Pinecone
        index = pull_from_pinecone(embeddings)
        st.write("Pinecone index retrieval done...")

        # Fetch relavant documents from Pinecone index
        relavant_docs = get_similar_docs(index, prompt, document_count)
        st.write(relavant_docs)

        # Displaying search results
        st.success("Please find the search results :")
        # Displaying search results
        st.write("search results list....")

        for document in relavant_docs:
            st.write("👉**Result : " + str(relavant_docs.index(document) + 1) + "**")
            st.write("**Info**: " + document.page_content)
            st.write("**Link**: " + document.metadata['source'])


    else:
        st.sidebar.error("Ooopssss!!! Please provide API keys.....")
